package com.briup.day18;

import java.io.*;

/**
 * 不是输入输出流 。独立的并有读取操作的功能IO类
 * 随机访问流 1.一个文件同时读写操作 2.可以任意位置进行读写操作
 * @author lining
 * @date 2024/1/30 14:18
 */
public class TestRadomAccessFile {
    public void method() throws Exception{
        //读取a.txt文件内容
        InputStream fis = new FileInputStream("a.txt");
        //默认读取流顺序就是一个个依次进行，直到流的末尾返回-1
        System.out.println(fis.read());
        System.out.println(fis.read());
        System.out.println(fis.read());
        System.out.println(fis.read());
        System.out.println(fis.read());//101
        //实现读取文件的第一个字节信息
        if(fis.markSupported()){
            fis.reset();//进行重置
            fis.mark(10);
        }
        fis.skip(1);//跳过一个字节
        System.out.println(fis.read());//输出102
    }
    public void method2() throws Exception{
        //读取a.txt文件内容
        byte[] arr = "abcdefghijk".getBytes();
        InputStream in = new ByteArrayInputStream(arr);
        //默认读取流顺序就是一个个依次进行，直到流的末尾返回-1
        System.out.println(in.read());//a97
        System.out.println(in.read());//b98
        System.out.println(in.read());//c99
        //实现读取文件的第一个字节信息
        System.out.println(in.markSupported());

        if(in.markSupported()){//支持标记
            // in.reset();//重置,标记重新从一个字节开始读取
            in.mark(10);//表示的是记录当前读到流的位置 99
        }
        System.out.println(in.read());//100
        in.reset();//将标志重新指定到mark对应的位置99
        System.out.println(in.read());//100
        System.out.println("----------------");


        in.skip(1);//跳过一个字节
        System.out.println(in.read());//输出99
    }
    public void method3() throws Exception{
        //使用字符缓存流
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("a.txt"))));
        System.out.println(br.markSupported());//是否支持标记
        System.out.println(br.read());//97
        br.mark(100);//标记当前流读取的位置 98
        System.out.println(br.read());
        System.out.println(br.read());
        System.out.println(br.read());
        System.out.println(br.read());
        br.reset();//重置到标记位置，开始重新读
        System.out.println(br.read());//98
    }
    public static void main(String[] args) throws Exception{
        //1.任意访问流.实现任意位置的字节读 写
        RandomAccessFile raf = new RandomAccessFile("a.txt", "rw");
        System.out.println(raf.read());//97
        System.out.println(raf.read());//98
        raf.seek(0); //mark+reset
        System.out.println(raf.read());//97
        System.out.println(raf.read());//98
        raf.seek(1);
        System.out.println(raf.read());
        System.out.println(raf.read());
        System.out.println("-------");
        //在任意位置进行写操作？？？
        raf.seek(0);//开头
//        raf.write(65);//在文件第一个字节上修改为字母A
        raf.write("hello".getBytes());
    }
}
